Web App 的 manifest 是一個 JSON 形式的配置檔,瀏覽器透過配置檔就會知道 Progressive Web App 該怎麼去安裝在用戶的電腦或手機裝置上,所以最基本的 manifest 會包含 App 的名稱、Icon、App 開啟時要顯示的 URL。
命名上其實沒有特別規定,但通常會是 manifest.json
並且放置在專案的根目錄,規格上的副檔名是有特別建議 .webmanifest
所以其實也可以,但 JSON 格式較容易廣泛的辨識和理解。
{
"short_name": "Weather",
"name": "Weather: Do I need an umbrella?",
"icons": [
{
"src": "/images/icons-192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "/images/icons-512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": "/?source=pwa",
"background_color": "#3367D6",
"display": "standalone",
"scope": "/",
"theme_color": "#3367D6",
"shortcuts": [
{
"name": "How's weather today?",
"short_name": "Today",
"description": "View weather information for today",
"url": "/today?source=pwa",
"icons": [{ "src": "/images/today.png", "sizes": "192x192" }]
},
{
"name": "How's weather tomorrow?",
"short_name": "Tomorrow",
"description": "View weather information for tomorrow",
"url": "/tomorrow?source=pwa",
"icons": [{ "src": "/images/tomorrow.png", "sizes": "192x192" }]
}
],
"description": "Weather forecast information",
"screenshots": [
{
"src": "/images/screenshot1.png",
"type": "image/png",
"sizes": "540x720"
},
{
"src": "/images/screenshot2.jpg",
"type": "image/jpg",
"sizes": "540x720"
}
]
}
name
/short_name
: 安裝後的 App 名稱 short_name
會用在顯示上有限制的地方icons
: 主畫面或是任務切換時顯示start_url
: App 開啟預設頁,須注意為相對路徑跟 manifest 位置相關,有填 Chrome 才會跳提示background_color
: 在加入主畫面後,啟動時 splash screen 的背景主視覺,在還沒安裝前的網址列也會改變顏色display
: 定義 App 開啟後的顯示方式目前有三種,各有細微差異 fullscreen
、standalone
、minimal-ui
兩個必須擇一填,若兩者都填
啟動畫面的 splash screen 背景色
網址列的顏色,注意要和 meta 中的顏色相同。
<meta name="theme-color" content="#3c553c" />
當用戶安裝 PWA 的時候,我們可以預先提供一套不同解析度的 icon 給瀏覽器用在不同的位置,icons 是包含圖片物件的陣列,對 Chrome 來說, PWA 至少要提供 192x192 和 512x512 兩種解析度的 icon,剩下的情境 Chrome 會自動針對裝置做優化。
每一個圖片物件須包含以下屬性:
Photo Credit: https://web.dev/
透過開發者工具勾選 Show only the minimum safe area for maskable icons 來看現在的 Icon 是否 maskable
說明這個 App 的一些介紹。
screenshots 是包含圖片物件的陣列, 就是 App 的使用說明截圖,description 和 screenshots 主要都是安裝相關訊息,所以目前只會用在 Android 上的 Chrome。
要滿足以下條件:
透過這個屬性我們可以選擇 App 開啟後的介面,舉例來說我們可隱藏網址列使用全螢幕去操作,但並非所有的瀏覽器都完整支援,支援度會以下面的順序向下支援:
"fullscreen" → "standalone" → "minimal-ui" → "browser"
若想要跳過上面順序的某個階段,就需要透過 display_override
來蓋掉:
{
"display_override": ["window-control-overlay", "minimal-ui"],
"display": "standalone"
}
start_url
算是最重要的一個必填屬性,要告訴瀏覽器當 App 啟動時要顯示什麼畫面,避免 App 因為用戶是從其他頁面加入至主畫面導致啟動頁面是從其他頁面開始。start_url
就是用戶打開的第一個頁面,可以看成產品專用的到達頁面。所以也值得從用戶想要開啟 App 的原因去規劃 start_url
位置。
shortcuts
相對於 start_url
則可以看成其他常用的子功能,以訂票系統來說就可以分為餘票查詢、時刻查詢等子功能,透過捷徑的配置就能夠讓用戶透過子選單直接開啟 App 並且使用功能,目前的支援度如下
Photo Credit: https://web.dev/
Photo Credit: https://web.dev/
如果對捷徑功能有興趣,可以試玩看看底下這個 App:
https://app-shortcuts.glitch.me/
透過開發者工具中的 Application Tab
可以輕鬆的察看是否我們的 manifest 有被正確的使用。
Photo Credit: https://web.dev/